/**
 * @ProjectName: go-learn-demo
 * @PackageName: osybxb
 * @Description:
 * @Author: hy.bai
 * @Date: 2025-08-01 11:51
 */
package osybxb

import (
	"fmt"
	"io"
	"os"
	"strings"
	"time"
)

// 1.读取文件中的所有数据
func TestReadFileData() {
	fileName := workplace + "/file.txt"
	// data, _ := ioutil.ReadFile(fileName) // 读取文件内容，返回字节数组
	// 方法已过时，代替方案是：os.ReadFile(fileName)
	data, err := os.ReadFile(fileName) // data是[]byte类型 - 字节数组。
	if err != nil {
		fmt.Printf("读取文件异常:%v\n", err)
		return
	}
	fmt.Printf("%s\n", string(data))

}

// 2.通过io.Reader读取数据
func TestReadDataByIO() {
	var str = "你好~，golang"
	reader := strings.NewReader(str)
	// 读取数据,常用语读取response中的内容，方法已过期对应的：io.ReadAll
	// db, _ := ioutil.ReadAll(reader)  // 下面是平替方法
	db, _ := io.ReadAll(reader)
	fmt.Printf("ReadAll方法:%s\n", string(db))
}

// 3. 读取指定路径下的文件或文件夹(只会读取当前目录下的，不会读取子目录)
func TestReadDir() {
	currentDir, _ := os.Getwd()
	// 都当前目录下的文件或目录,只读取一级，不会读取多级。
	// fileInfos, _ := ioutil.ReadDir(currentDir) // 方法已过时，代替是：os.ReadDir
	fileInfos, _ := os.ReadDir(currentDir)
	fmt.Printf("fileInfos的类型是：%T", fileInfos) // fileInfos的类型是：[]fs.DirEntry0(切片类型)
	for index, fileInfo := range fileInfos {
		// fileInfo := fileInfos[index]
		if fileInfo.IsDir() {
			fmt.Printf("第%d次 - 当前路径下的目录有:%v\n", index, fileInfo.Name())
		} else {
			fmt.Printf("第%d次 - 当前路径下的文件有:%v\n", index, fileInfo.Name())
		}
	}
}

// 4.写入文件
func TestWriteFileData() {
	fileName := workplace + "/file.txt"
	var content = fmt.Sprintf("你好~, golang, 当前时间是:%s", time.Now().Format("2006-01-02 15:04:05"))
	// err := ioutil.WriteFile(fileName, []byte(content), os.ModePerm)
	// 方法已过时，代替方案是：os.WriteFile(fileName)
	err := os.WriteFile(fileName, []byte(content), os.ModePerm)
	// 注意:数据写入时，会把文件中的内容会被覆盖掉。
	if err != nil {
		fmt.Printf("文件写入异常:%v\n", err)
	}
}
